/**
 * Captain
 * © 2017 Captain copyright，All rights reserved.
 * http://www.sccaptain.com.cn
 * 
 * JAVA : 8
 * 文  件  名: Restrictions.java
 * 创  建  人: liutao (liu.tao@sccaptain.com.cn)
 * 创建时间: 2017年8月2日 下午2:12:43
 * 版         本: 1.0.0
 * 备         注:
 * 修订历史:
 */
package com.material.c2c.core.criteria;

import com.material.c2c.core.criteria.Criterion.MatchMode;
import com.material.c2c.core.criteria.Criterion.Operator;

/**
 * 条件构造器 - 用于创建条件表达式
 * 
 * @since 1.0
 * @version 1.0
 * @author liutao (liu.tao@sccaptain.com.cn)
 */
public class Restrictions {

  /**
   * 等于 。
   * 
   * @param property
   *          匹配字段
   * @param value
   *          匹配值
   * @return CriterionExpression 表达式
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression eq(String property, Object value) {
    return new CriterionExpression(property, value, Operator.EQ);
  }
  
  /**
   * 等于 。
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression eq(String property, Object value,String propertyType) {
    return new CriterionExpression(property, value, Operator.EQ, propertyType);
  }
  
  /**
   * 等于 。 
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @param pattern 日期格式
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression eq(String property, Object value,String propertyType,String pattern) {
    return new CriterionExpression(property, value, Operator.EQ, propertyType,pattern);
  }
  
  /**
   * 返回不等于筛选
   *
   * @param property
   *          属性
   * @param value
   *          值
   * @return 不等于筛选
   */
  public static CriterionExpression ne(String property, Object value) {
    return new CriterionExpression(property, value, Operator.NE);
  }
  
  /**
   * 不等于 。
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression ne(String property, Object value,String propertyType) {
    return new CriterionExpression(property, value, Operator.NE, propertyType);
  }
  
  /**
   * 不等于 。 
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @param pattern 日期格式
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression ne(String property, Object value,String propertyType,String pattern) {
    return new CriterionExpression(property, value, Operator.NE, propertyType,pattern);
  }
  
  /**
   * 返回大于筛选
   *
   * @param property
   *          属性
   * @param value
   *          值
   * @return 大于
   */
  public static CriterionExpression gt(String property, Object value) {
    return new CriterionExpression(property, value, Operator.GT);
  }
  
  /**
   * 大于 。
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression gt(String property, Object value,String propertyType) {
    return new CriterionExpression(property, value, Operator.GT, propertyType);
  }
  
  /**
   * 大于 。 
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @param pattern 日期格式
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression gt(String property, Object value,String propertyType,String pattern) {
    return new CriterionExpression(property, value, Operator.GT, propertyType,pattern);
  }
  
  /**
   * 返回大于等于筛选
   *
   * @param property
   *          属性
   * @param value
   *          值
   * @return 大于等于
   */
  public static CriterionExpression gte(String property, Object value) {
    return new CriterionExpression(property, value, Operator.GTE);
  }
  
  /**
   * 大于等于 。
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression gte(String property, Object value,String propertyType) {
    return new CriterionExpression(property, value, Operator.GTE, propertyType);
  }
  
  /**
   * 大于等于 。 
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @param pattern 日期格式
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression gte(String property, Object value,String propertyType,String pattern) {
    return new CriterionExpression(property, value, Operator.GTE, propertyType,pattern);
  }
  
  /**
   * 返回小于筛选
   *
   * @param property
   *          属性
   * @param value
   *          值
   * @return 小于
   */
  public static CriterionExpression lt(String property, Object value) {
    return new CriterionExpression(property, value, Operator.LT);
  }
  
  /**
   * 小于 。
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression lt(String property, Object value,String propertyType) {
    return new CriterionExpression(property, value, Operator.LT, propertyType);
  }
  
  /**
   * 小于 。 
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @param pattern 日期格式
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression lt(String property, Object value,String propertyType,String pattern) {
    return new CriterionExpression(property, value, Operator.LT, propertyType,pattern);
  }
  
  /**
   * 返回小于等于筛选
   *
   * @param property
   *          属性
   * @param value
   *          值
   * @return 小于等于
   */
  public static CriterionExpression lte(String property, Object value) {
    return new CriterionExpression(property, value, Operator.LTE);
  }
  
  /**
   * 小于等于 。
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression lte(String property, Object value,String propertyType) {
    return new CriterionExpression(property, value, Operator.LTE, propertyType);
  }
  
  /**
   * 小于等于 。 
   * @param property 匹配字段
   * @param value 匹配值
   * @param propertyType 字段类型
   * @param pattern 日期格式
   * @return
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression lte(String property, Object value,String propertyType,String pattern) {
    return new CriterionExpression(property, value, Operator.LTE, propertyType,pattern);
  }
  
  /**
   * 返回like筛选 
   * @param property 属性
   * @param value 值
   * @return like
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression like(String property, Object value) {
    return new CriterionExpression(property, value, Operator.LIKE,MatchMode.ANYWHERE);
  }
  
  /**
   * 返回like筛选 
   * @param property 属性 
   * @param value 值
   * @param mode 
   * @return 返回like筛选 
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression like(String property, Object value,MatchMode mode) {
    return new CriterionExpression(property, value, Operator.LIKE,mode);
  }
  
  /**
   * 返回为Null筛选
   *
   * @param property
   *          属性
   * @return 为Null筛选
   */
  public static CriterionExpression isNull(String property) {
    return new CriterionExpression(property,  null,Operator.ISNULL);
  }

  /**
   * 返回不为Null筛选
   *
   * @param property
   *          属性
   * @return 不为Null筛选
   */
  public static CriterionExpression isNotNull(String property) {
    return new CriterionExpression(property, null,Operator.ISNOTNULL);
  }
  
  /**
   * 返回like筛选 
   * @param property 属性 
   * @param value 值
   * @param mode 
   * @return 返回like筛选 
   * @since 1.0
   * @version 1.0
   * @author liutao (liu.tao@sccaptain.com.cn)
   */
  public static CriterionExpression in(String property, Object ...value) {
    return new CriterionExpression(property, value, Operator.IN);
  }
}
